﻿using MaxStoreErp.Core.Events;
using MaxStoreErp.Core.Services;
using MaxStoreErp.Core.Threading;
using Microsoft.Practices.Prism.Events;
using Microsoft.Practices.Prism.Modularity;
using Microsoft.Practices.Unity;

namespace MaxStoreErp.Core.BaseClasses
{
    /// <summary>
    /// Базовый класс модулей приложения
    /// </summary>
    public abstract class ModuleBase : IModule
    {
        [Dependency]
        public IUnityContainer UnityContainer { get; set; }

        [Dependency]
        public IEventAggregator EventAggregator { get; set; }

        [Dependency]
        public IMainMenuService MainMenuService { get; set; }

        /// <summary>
        /// Получает наименование модуля
        /// </summary>
        protected abstract string ModuleName { get; }

        /// <summary>
        /// Вызывается загрузчиком модуля на этапе инициализации
        /// </summary>
        public virtual void Initialize()
        {
            EventAggregator.GetEvent<ModuleLoadingEvent>().Publish(new ModuleLoadingEventArgs(ModuleName));
            RegisterServices();
            ThreadHelper.SafeCall(RegisterMenuItems);
        }

        /// <summary>
        /// Вызывается при регистрации служб модуля
        /// </summary>
        protected virtual void RegisterServices()
        {

        }

        /// <summary>
        /// Вызывается при регистрации модулем элементов главного меню приложения
        /// </summary>
        protected virtual void RegisterMenuItems()
        {

        }
    }
}
